package com.lin.it;

import org.apache.commons.lang3.time.StopWatch;
import org.junit.Test;

/**
 * @ClassName TestStopWatch
 * @Description
 * @Author lin
 * @Date 2022/7/26 下午10:38
 * @Version V1.0
 */
public class TestStopWatch {
    /**
     * 传统使用代码统计耗时
     * 使用系统ms或者ns
     * */
    @Test
    public void test1() throws InterruptedException {
        long start = System.currentTimeMillis();
        long startN = System.nanoTime();
        Thread.sleep(100);
        System.out.println(System.currentTimeMillis()-start);
        System.out.println(System.nanoTime()-startN);
    }

    /**
     * commons-lang3 包中提供了一个用于计时的工具类
     * 创建一个 StopWatch 实例有以下 3 种方法：
     * StopWatch sw = new StopWatch();
     * StopWatch sw = StopWatch.create();
     * StopWatch sw = StopWatch.createStarted();  这个方法不但会创建一个实例，同时还会启动计时。
     * */
    @Test
    public void test2() throws InterruptedException {
        StopWatch sw = StopWatch.createStarted();
        Thread.sleep(1000);
        System.out.printf("耗时：%dms.\n", sw.getTime());
        // 暂停计时
        sw.suspend();
        Thread.sleep(1000);
        System.out.printf("暂停耗时：%dms.\n", sw.getTime());
        // 恢复计时
        sw.resume();
        Thread.sleep(1000);
        System.out.printf("恢复耗时：%dms.\n", sw.getTime());
        // 停止计时，停止计时后，该计时器停止工作，直到reset之后。否则会报错。
        sw.stop();
        Thread.sleep(1000);
        System.out.printf("总耗时：%dms.\n", sw.getTime());
        // 重置计时
        sw.reset();
        System.out.printf("当前时间：%dns.\n",sw.getNanoTime());
        sw.start();
        System.out.println(System.currentTimeMillis());
        Thread.sleep(1000);
        System.out.printf("重置耗时：%dms.\n", sw.getStartTime());
    }
}
